package com.hmall.cart.domain.vo;

import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;

import java.time.LocalDateTime;

/**
 * 购物车视图对象（VO）
 * 用于前端展示的购物车数据模型
 * 包含商品基本信息、当前价格、库存状态等实时信息
 */
@Data
@ApiModel(description = "购物车VO实体，用于前端展示的购物车数据模型")
public class CartVO {

    /**
     * 购物车条目ID
     * 唯一标识购物车中的一个商品条目
     */
    @ApiModelProperty(value = "购物车条目ID", example = "10001")
    private Long id;

    /**
     * SKU商品ID
     * 关联商品表，用于查询商品最新信息
     */
    @ApiModelProperty(value = "SKU商品ID", example = "20001")
    private Long itemId;

    /**
     * 购买数量
     * 用户选择的商品购买数量
     */
    @ApiModelProperty(value = "购买数量", example = "2")
    private Integer num;

    /**
     * 商品标题
     * 冗余存储的商品名称，用于快速展示
     */
    @ApiModelProperty(value = "商品标题", example = "华为 Mate 50 Pro")
    private String name;

    /**
     * 商品动态属性键值集
     * JSON格式字符串，存储用户选择的商品规格（如颜色、尺寸）
     */
    @ApiModelProperty(value = "商品规格JSON", example = "{\"颜色\":\"黑色\",\"内存\":\"256G\"}")
    private String spec;

    /**
     * 加入购物车时的价格（单位：分）
     * 固定记录添加时的价格，用于展示历史价格对比
     */
    @ApiModelProperty(value = "加入购物车时的价格（分）", example = "699900")
    private Integer price;

    /**
     * 商品最新价格（单位：分）
     * 实时查询的商品当前价格，用于结算和价格提示
     */
    @ApiModelProperty(value = "商品最新价格（分）", example = "679900")
    private Integer newPrice;

    /**
     * 商品最新状态
     * 1-正常，2-下架，3-无库存
     */
    @ApiModelProperty(value = "商品最新状态（1-正常，2-下架，3-无库存）", example = "1")
    private Integer status = 1;

    /**
     * 商品最新库存
     * 实时查询的商品可用库存数量
     */
    @ApiModelProperty(value = "商品最新库存", example = "10")
    private Integer stock = 10;

    /**
     * 商品图片
     * 冗余存储的商品主图URL，用于快速展示
     */
    @ApiModelProperty(value = "商品图片URL", example = "https://example.com/images/20001.jpg")
    private String image;

    /**
     * 创建时间
     * 记录商品添加到购物车的时间
     */
    @ApiModelProperty(value = "添加时间", example = "2023-10-01T12:00:00")
    private LocalDateTime createTime;
}